import scrapy
from first_blood.items import FirstBloodItem

# 案例：糗事百科段子的作者和段子提取

# class FirstSpider(scrapy.Spider):
#     # 爬虫文件的名称，是爬虫源文件的一个唯一标识
#     name = '段子提取'
#     # 允许的域名：用来限定allowed_domains列表中哪些url可以进行请求发送
#     # allowed_domains = ['example.com']
#     # 起始的url列表：该列表中存放的url会被scrapy自动进行请求的发送
#     start_urls = ['https://www.qiushibaike.com/text/',]

#     # 用于数据解析：response参数表示的是请求成功后对应的响应对象
#     def parse(self, response):
#         """
#         操作请求返回的响应对象，scrapy中自带xpath方法，xpath返回的是列表，但列表元素一定是Selector对象，
#         extract()可以将Selector对象中的data参数存储的字符串提取出来
#         """
#         # 拿到整页段子的div
#         div_list = response.xpath('//*[@id="content"]/div/div[2]/div')

#         res = {}    # 用于存储提取到的数据
#         for div in div_list:
#             # print(div.extract())
#             author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
#             # 可以用extract_first()方法提取Selector对象列表中第一个对象的data参数数据
#             # author = div.xpath('./div[1]/a[2]/h2/text()').extract_first()
#             texts = div.xpath('./a[1]/div/span//text()').extract()
#             # print(author,''.join(texts))
#             # break   # 测试，只打印第一个段子
#             res[author] = texts
        
#         return res  # 返回提取的结果，方便终端输出到本地文件


class FirstSpider(scrapy.Spider):
    # 爬虫文件的名称，是爬虫源文件的一个唯一标识
    name = '段子提取'
    # 允许的域名：用来限定allowed_domains列表中哪些url可以进行请求发送
    # allowed_domains = ['example.com']
    # 起始的url列表：该列表中存放的url会被scrapy自动进行请求的发送
    start_urls = ['https://www.qiushibaike.com/text/',]
    # 用于数据解析：response参数表示的是请求成功后对应的响应对象
    def parse(self, response):
        """
        操作请求返回的响应对象，scrapy中自带xpath方法，xpath返回的是列表，但列表元素一定是Selector对象，
        extract()可以将Selector对象中的data参数存储的字符串提取出来
        """
        # 拿到整页段子的div
        div_list = response.xpath('//*[@id="content"]/div/div[2]/div')
        for div in div_list:
            # print(div.extract())
            author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
            # 可以用extract_first()方法提取Selector对象列表中第一个对象的data参数数据
            # author = div.xpath('./div[1]/a[2]/h2/text()').extract_first()
            texts = div.xpath('./a[1]/div/span//text()').extract()
            item = FirstBloodItem() # 实例化一个item对象
            # 数据封装
            item['author'] = author
            item['texts'] = ''.join(texts)
            # 将item提交给管道
            yield item
        

